추론된 Type을 내가 원하는 대로 덮어씌울 수 있다. 주로 JavaScript에서 TypeScript코드로 넘어가야할 때 자주 사용한다. 아래 코드를 보자:
var foo = {};
foo.bar = 123; // Error: property 'bar' does not exist on `{}`
foo.bas = 'hello'; // Error: property 'bas' does not exist on `{}`
여기서 foo
의 Type은 속성이 없는 {}
로 추론된다. 그렇기 때문에 아래 코드에서 접근시 에러가 표시된다.
interface Foo {
bar: number;
bas: string;
}
var foo = {} as Foo;
foo.bar = 123;
foo.bas = 'hello';
위처럼 interface
를 이용해 구조를 정의하고 타입 단언을 하면 속성에 대한 접근을 해도 에러가 표시되지 않는다.
왜 type casting이라고 불리지 않을까? type casting이라고 하면 뭔가 runtime에 변형을 주는 것을 의미한다. type assertion은 compile time에 정적 타이핑을 할 때 도움을 주므로 casting이 아니다.
⚠️
Type assertion은 내가 type을 이해하기 편하게 하기 위해 사용하는 것이므로 그 뒤에 관련있는 처리를 해주지 않는다면 나중에 에러가 날 수 있다. 올바른 type이 아닌데 단언을 한 경우에도 코드가 위험해진다.